package de.pyrazol.starshipRPG;

import java.util.ArrayList;

public abstract class Starship
{
	public static final String typeString = "Starhip";
	
	/** Health Points */
    private int hp;
    
    /** Angriffsst&auml;rke */
    private int attack;
    
    /** Verteidigung */
    private int defense;

    /**
     * Statische Methode: Liefert eine Liste
     * aller Schiffstypen zur&uuml;ck
     * 
     * @return Liste aller Schiffstypen
     */
    public static ArrayList<String> getTypeList() {
    	ArrayList<String> types = new ArrayList<String>();
    	types.add("Battleship");
    	types.add("Cruiser");
    	types.add("Stealth Ship");
    	return types;
    }
    
    /**
     * Erstellt ein Starship-Objekt von dem Typ, der
     * &uuml;ber einen String ausgew&auml;hlt wird
     * 
     * @param typeStr Bezeichnung des Schiffstyps
     * @return Neues Starship-Objekt
     */
    public static Starship createShip(String typeStr) {
    	if (typeStr.equals("Battleship")) {
			return new Battleship();
		} else if (typeStr.equals("Cruiser")) {
			return new Cruiser();
		} else if (typeStr.equals("StealthShip")) {
			return new StealthShip();
		} else { // Kein gueltiger Typ-String
			return null;
		}
    }
    
    /**
     * Konstruktor
     * 
     * @param hp Health Points
     * @param attack Angriffsst&uml;rke
     * @param defense Verteidigung
     */
    public Starship(int hp, int attack, int defense)
    {
        this.hp = hp;
        this.attack = attack;
        this.defense = defense;
    }
    
    /**
     * Liefert den Typ des Schiffes als
     * String zur&uuml;ck
     * 
     * return Typ des Schiffes
     */
    public String toString() {
    	return this.typeString;
    }
        
    /**
     * Liefert die HP zur&uuml;ck
     * 
     * @return HP des Schiffes
     */
    private int getHP()
    {
    	return this.hp;
    }
    
    /**
     * Legt die HP fest
     * 
     * @param number Neue HP des Schiffes
     */
    private void setHP(int number)
    {
    	this.hp = number;
    }
    
    /**
     * Liefert die Angriffsst&auml;rke zur&uuml;ck
     * 
     * @return Angriffsst&auml;rke des Schiffes
     */
    public int getAttack() {
		return attack;
	}

    /**
     * Legt die Angriffsst&auml;rke fest
     * 
     * @param attack Neue Angriffsst&auml;rke des Schiffes
     */
	public void setAttack(int attack) {
		this.attack = attack;
	}

	/**
	 * Liefert die Verteidigung zur&uuml;ck
	 * 
	 * @return Verteidigung des Schiffes
	 */
	public int getDefense() {
		return defense;
	}

	/**
	 * Legt die Verteidigung fest
	 * 
	 * @param defense Neue Verteidigung des Schiffes
	 */
	public void setDefense(int defense) {
		this.defense = defense;
	}

	/**
	 * F&uuml;gt dem Schiff Schaden zu
	 * 
	 * @param dmg Erlittener Schaden
	 */
	public void takeDamage(int dmg)
    {
    	this.setHP(this.getHP() - dmg);
    }
}
